home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2011 November
/
CHIP_2011_11.iso
/
Programy
/
Inne
/
Gry
/
GNU_Backgammon
/
gnubg-MAIN-20110822-setup.exe
/
{app}
/
batch.py
< prev
next >
Wrap
Text File
|
2007-07-02
|
7KB
|
213 lines
#
# batch.py -- batch import and analysis of multiple files using gnubg
#
# by Jon Kinsey <Jon_Kinsey@hotmail.com>, 2004
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 3 or later of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: batch.py,v 1.4 2007/07/02 12:50:12 ace Exp $
"""
batch.py -- batch import and analysis of multiple files using gnubg
by Jon Kinsey <Jon_Kinsey@hotmail.com>, 2004
\n"""
# Achim Mueller <ace@gnubg.org>
#
# Usage: start gnubg -t
# (no game) load python batch.py
# Answer questions regarding source and destination directory
# Enjoy the analysis
import os
# file extensions, names and gnubg import commands
extensions = ['mat', 'pos', 'sgg', 'tmg', 'txt']
extTypes = ['.mat', '.pos', 'Games grid', 'True money game', 'Snowie text']
extCmds = ['mat', 'pos', 'sgg', 'tmg', 'snowietxt']
LAST_VALUES = "batch.dirs"
def CheckFiles(files, dir, destDir):
"Check files aren't already analyzed"
fileList = [[], [], [], [], []]
foundFile = False
for eType in extTypes:
numType = extTypes.index(eType)
for file in files[numType]:
# Check that file hasn't already been analyzed
dot = file.rfind('.')
existingOutputFile = destDir + file[ : dot] + '.sgf'
if (os.access(existingOutputFile, os.F_OK)):
# See if newer
if os.stat(existingOutputFile).st_mtime > os.stat(dir + file).st_mtime:
continue # Skip as already processed
foundFile = True
fileList[numType].append(file)
if foundFile:
return fileList
else:
print " ** All files in directory already processed **"
def GetFiles(dir):
"Look for gnubg import files in dir"
try:
files = os.listdir(dir)
except:
print " ** Directory not found **"
return 0
fileList = [[], [], [], [], []]
foundAnyFile = False
foundBGFile = False
# Check each file in dir
for file in files:
# Check it's a file (not a directory)
if os.path.isfile(dir + file):
foundAnyFile = True
# Check has supported extension
dot = file.rfind('.')
if dot != -1:
ext = file[dot + 1 : ].lower()
if ext in extensions:
foundBGFile = True
ftype = extensions.index(ext)
fileList[ftype].append(file)
if foundBGFile:
return fileList
else:
if not foundAnyFile:
print " ** No files in directory **"
else:
print " ** No valid files found in directory **"
return 0
def AnalyzeFile(prompt, file, dir, destDir, type):
"Run commands to analyze file in gnubg"
gnubg.command('import ' + extCmds[type] + ' "' + dir + file + '"')
print prompt + " Analysing " + file
gnubg.command('analyze match')
file = file[:-len(extensions[type])] + "sgf"
gnubg.command('save match "' + destDir + file + '"')
def GetYN(prompt):
confirm = '';
while len(confirm) == 0 or (confirm[0] != 'y' and confirm[0] != 'n'):
confirm = raw_input(prompt + " (y/n): ").lower()
return confirm
def GetDir(prompt):
dir = raw_input(prompt)
if dir:
# Make sure dir ends in a slash
if (dir[-1] != '\\' and dir[-1] != '/'):
dir = dir + '/'
return dir
def BatchImport():
"Import and analyse all files in a directory"
dirs = [0, 0]
# See if last dirs saved
if (os.access(LAST_VALUES, os.F_OK)):
file = open(LAST_VALUES, "r")
dirs = file.readlines()
file.close()
# Remove new lines
dirs[0] = dirs[0][:-1]
dirs[1] = dirs[1][:-1]
if os.path.isdir(dirs[0]) and os.path.isdir(dirs[1]):
print "Last used dirs:\n from:", dirs[0][:-1], "\n to:", dirs[1][:-1]
if GetYN("Reuse") == 'n':
dirs = [0, 0]
else:
dirs = [0, 0]
while True:
# Get directory with original files in
if (dirs[0] == 0):
dirs[0] = GetDir("Directory containing files to import (enter-exit): ")
if not dirs[0]:
return
# Look for some files
inFiles = GetFiles(dirs[0])
if not inFiles:
dirs = [0, 0]
continue
if (dirs[1] == 0):
# Get directory to put analyzed files in
while True:
dirs[1] = GetDir("Directory to put analyzed files in (enter-same dir): ")
if not dirs[1]:
dirs[1] = dirs[0]
if os.path.isdir(dirs[1]):
break;
print " ** Directory not found **"
# Make sure files are new
files = CheckFiles(inFiles, dirs[0], dirs[1])
if files:
break
dirs = [0, 0]
# Display files that will be analyzed
numFound = 0
for eType in extTypes:
numType = extTypes.index(eType)
if len(files[numType]):
print "\n" + eType + " files:"
for file in files[numType]:
print " " + file
numFound = numFound + 1
if (numFound > 1):
print "\n", numFound, "files found\n"
# Check user wants to continue
if GetYN("Continue") == 'n':
return
# Save dirs for next time
file = open(LAST_VALUES, "w")
file.write(dirs[0] + "\n")
file.write(dirs[1] + "\n")
file.close()
# Analyze each file
num = 0
for eType in extTypes:
if len(files[extTypes.index(eType)]):
print "\n" + eType + " files:"
numType = extTypes.index(eType)
for file in files[numType]:
num = num + 1
prompt = "\n(%d/%d)" % (num, numFound)
AnalyzeFile(prompt, file, dirs[0], dirs[1], numType)
print "\n** Finished **"
return
# Run batchimport on load
try:
print __doc__
BatchImport()
except Exception, (e):
print "Error:", e